package com.hake.core.support.mapper;

import java.util.List;

import org.apache.ibatis.annotations.Param;

import com.hake.core.exception.AppException;

/**
 * MyBatis-Generator默认生成的DAO
 * @author yanghaoquan
 *
 * @param <T>
 */
public interface BaseMapper<T> {
	
	/**
	 * 插入所有字段数据
	 * @param entity
	 * @return
	 * @throws AppException
	 */
	int insert(T entity) throws AppException;
	
	/**
	 * 仅插入不为空字段数据
	 * @param entity
	 * @return
	 * @throws AppException
	 */
	int insertSelective(T entity) throws AppException;
	
	/**
	 * 根据主键删除
	 * @param id
	 * @return
	 * @throws AppException
	 */
	int deleteByPrimaryKey(Object id) throws AppException;

	/**
	 * 仅修改不为空字段数据
	 * @param entity
	 * @return
	 * @throws AppException
	 */
    int updateByPrimaryKeySelective(T entity) throws AppException;

    /**
     * 修改所有字段数据
     * @param entity
     * @return
     * @throws AppException
     */
    int updateByPrimaryKey(T entity) throws AppException;

    /**
     * 根据主键查询对象
     * @param id
     * @return
     * @throws AppException
     */
    T selectByPrimaryKey(Object id) throws AppException;
    
    /**
     * 查询所有对象
     * @return
     * @throws AppException
     */
    List<T> selectAll() throws AppException ;
    
    /**
	 * 检查字段的值是否已存在
	 * @param id ID可以为NULL，主要用于update操作
	 * @param field coulum名
	 * @param fieldVal column值
	 * @return
	 */
	int existsFileldValue(@Param("id") Object id, @Param("field") String field, @Param("fieldVal") String fieldVal) throws AppException ;
	
	/**
	 * 批量删除
	 * @param ids 主键
	 * @return
	 */
	int deleteBatchByKeys(Object[] ids) throws AppException ;
	
	/**
	 * 分页查询
	 * @param entity 实体对象
	 * @return
	 */
	List<T> selectByPage(T entity) throws AppException ;
}
